USE [GD1C2012]
GO
--SP Obtener los registro de viajes a facturacion
CREATE PROCEDURE TEQUILASO.sp_buscarRegistroViajeAFacturar
	@Id_Cliente int,
	@fecha_desde datetime,
	@fecha_hasta datetime
AS
BEGIN
	select R.Fecha_Hora_InicioViaje, (CH.APELLIDO + ', ' + CH.NOMBRE) as chofer,  T.DESCRIPCION, R.Cant_Fichas, T.Valor_Ficha, T.Valor_Bandera
	from TEQUILASO.REGISTRO_VIAJE R, TEQUILASO.TURNO T, TEQUILASO.CHOFER CH
	where R.Id_Turno = T.id
	and R.Id_Chofer = CH.id
	and R.Id_Cliente = @Id_Cliente
	and R.Fecha_Hora_InicioViaje between  @fecha_desde and @fecha_hasta
	order by R.Fecha_Hora_InicioViaje
END
GO

--Calcula el importe a guardar
CREATE FUNCTION TEQUILASO.fn_obtenerImporteAFacturar(
	@Id_Cliente int,
	@fecha_desde datetime,
	@fecha_hasta datetime
)
RETURNS money
WITH EXECUTE AS CALLER
AS
BEGIN
	Declare @importe money
	select @importe = SUM(T.Valor_Bandera) + SUM(R.Cant_Fichas * T.Valor_Ficha)
	from TEQUILASO.REGISTRO_VIAJE R, TEQUILASO.TURNO T
	where R.Id_Turno = T.id
	and R.Id_Cliente = @Id_Cliente
	and R.Fecha_Hora_InicioViaje between  @fecha_desde and @fecha_hasta
return(ISNULL(@importe, 0))
END
GO

--Registra la facturacion
CREATE PROCEDURE TEQUILASO.sp_facturar
	@Id_Cliente int,
	@fecha_desde datetime,
	@fecha_hasta datetime
AS
BEGIN
	IF EXISTS (select * from TEQUILASO.FACTURACION_CLIENTE
			   where Id_Cliente = @Id_Cliente
			   and Fecha_Inicio = @fecha_desde
			   and Fecha_Fin = @fecha_hasta
			   )
	begin
		RAISERROR('Ya exite una facturacion registrada', 1, 1)
		RETURN
	end
	IF EXISTS (select * from TEQUILASO.FACTURACION_CLIENTE
			   where Id_Cliente = @Id_Cliente
			   -- Si la fecha de inicio esta dentro del rango pero no la fecha fin
			   -- o si la fecha de fin esta dentro del rango pero no la fecha del inicio
			   -- Significa que una parte de la facturacion ya esta registrada
			   and (	(
							(Fecha_Inicio between @fecha_desde and @fecha_hasta) 
							and not(Fecha_Fin between @fecha_desde and @fecha_hasta) 
						) or (
							(Fecha_Fin between @fecha_desde and @fecha_hasta) 
							and not (Fecha_Inicio between @fecha_desde and @fecha_hasta) 
						)
					)
			   )
	begin
		RAISERROR('Ya exite una parte de la facturacion registrada', 1, 1)
		RETURN
	end
	INSERT INTO TEQUILASO.FACTURACION_CLIENTE
           (Id_Cliente, Fecha_Inicio, Fecha_Fin, Importe)
     VALUES
           (@Id_Cliente, @fecha_desde, @fecha_hasta, 
				TEQUILASO.fn_obtenerImporteAFacturar(@Id_Cliente, @fecha_desde, @fecha_hasta)
			)
END
GO

CREATE PROCEDURE TEQUILASO.sp_verFacturacionCliente
AS
BEGIN
	SELECT * FROM tequilaso.facturacion_cliente 
END

--DROP PROCEDURE TEQUILASO.sp_buscarRegistroViajeAFacturar 
--DROP FUNCTION TEQUILASO.fn_obtenerImporteAFacturar
--DROP PROCEDURE TEQUILASO.sp_facturar 
--execute TEQUILASO.sp_buscarRegistroViajeAFacturar 1, '2009/01/01', '2009/01/31'
--execute TEQUILASO.sp_obtenerImporteAFacturar 1, '2009/01/01', '2009/01/31'
--SELECT TEQUILASO.fn_obtenerImporteAFacturar(6, '2009/01/01', '2009/01/31')
--execute TEQUILASO.sp_facturar 1, '2009/12/01', '2010/01/10'
--select * from TEQUILASO.FACTURACION_CLIENTE order by Fecha_Inicio  desc
